package com.william.jdbcplus.core.generator;

import com.william.jdbcplus.core.generator.meta.EntityTableInfo;
import com.william.jdbcplus.core.toolkit.DateUtil;
import com.william.jdbcplus.core.toolkit.StringPool;

import java.util.Date;

/**
 * 实体代码生成器
 */
public class ControllerGenerator {

    public static String generator(GeneratorConfig config, EntityTableInfo tableInfo) {
        String packageName = config.getPackageName();
        String moduleName = config.getModuleName();
        StringBuffer code = new StringBuffer();
        code.append(String.format("package %s.%s.controller;", config.getPackageName(), config.getModuleName()));
        code.append(StringPool.NEWLINE);
        code.append(StringPool.NEWLINE).append("import com.xky.core.db.web.MapClient;");
        code.append(StringPool.NEWLINE).append("import com.xky.core.db.web.MapController;");
        code.append(StringPool.NEWLINE).append(String.format("import %s.%s.entity.%s;", packageName, moduleName, tableInfo.getEntityName()));
        code.append(StringPool.NEWLINE).append("import io.swagger.annotations.Api;");
        code.append(StringPool.NEWLINE).append("import org.springframework.web.bind.annotation.RequestMapping;");
        code.append(StringPool.NEWLINE).append("import org.springframework.web.bind.annotation.RestController;");
        code.append(StringPool.NEWLINE);
        code.append(StringPool.NEWLINE).append("/**");
        code.append(StringPool.NEWLINE).append(String.format("* %s api接口", tableInfo.getTableRemarks()));
        code.append(StringPool.NEWLINE).append(" * ");
        code.append(StringPool.NEWLINE).append(String.format(" * @author %s", config.getAuthor()));
        code.append(StringPool.NEWLINE).append(String.format(" * @date %s", DateUtil.formatDateTime(new Date())));
        code.append(StringPool.NEWLINE).append(" */ ");
        code.append(StringPool.NEWLINE).append("@Api(value = \"客户端表API接口\")");
        code.append(StringPool.NEWLINE).append("@RestController");
        code.append(StringPool.NEWLINE).append(String.format("@RequestMapping(\"/%s\")", tableInfo.getEntityName()));
        code.append(StringPool.NEWLINE).append(String.format("public class %sController extends MapController<%s, %s> implements MapClient<%s, %s> {", tableInfo.getEntityName(),
                tableInfo.getEntityName(), tableInfo.getKeyInfo().getAttrType(), tableInfo.getEntityName(), tableInfo.getKeyInfo().getAttrType()));
        code.append(StringPool.NEWLINE).append("}");
        String codeText = code.toString();
        return codeText;
    }
}
